#include "StaLed.h"

void StaLed_Init(
    StaLed_t *ledst ,
    volatile uint32_t * _port 
) {
    ledst->port = _port ;
    for(uint8_t i=0;i<STALEN_NUM;++i) {
        ledst->led[i] = STALED_OFF ;
    }
    *ledst->port = 0 ;
    ledst->reg = 0 ;
}


void StaLed_Set(StaLed_t *ledst ,uint8_t id , uint8_t value) {
    if(id>STALEN_NUM-1) return ;
    ledst->led[id] = value ;
}


void StaLed_Yield(StaLed_t *ledst) {
    for(uint8_t i=0;i<STALEN_NUM;++i){
        if(ledst->led[i] &0x1) {
            ledst->reg |= 1u<<i ; 
        } else {
            ledst->reg &= ~(1u<<i) ; 
        }
        ledst->led[i] = (ledst->led[i]<<1) | (ledst->led[i]>>7) ;
    }
    *ledst->port = ledst->reg ;
}



